<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Cart extends Model
{
    use HasFactory;

    /**
     * 可批量赋值的属性
     *
     * @var array
     */
    protected $fillable = [
        'user_id',
        'product_id',
        'quantity',
    ];

    /**
     * 获取此购物车项目关联的用户
     */
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    /**
     * 获取此购物车项目关联的商品
     */
    public function product()
    {
        return $this->belongsTo(Product::class);
    }

    /**
     * 获取用户的购物车项目
     *
     * @param int $userId
     * @return \Illuminate\Database\Eloquent\Collection
     */
    public static function getCartItems($userId)
    {
        return self::where('user_id', $userId)
            ->with('product')
            ->get();
    }

    /**
     * 添加商品到购物车
     *
     * @param int $userId
     * @param int $productId
     * @param int $quantity
     * @return Cart
     */
    public static function addToCart($userId, $productId, $quantity = 1)
    {
        $cartItem = self::where('user_id', $userId)
            ->where('product_id', $productId)
            ->first();

        if ($cartItem) {
            // 如果商品已经在购物车中，增加数量
            $cartItem->quantity += $quantity;
            $cartItem->save();
        } else {
            // 如果商品不在购物车中，创建新记录
            $cartItem = self::create([
                'user_id' => $userId,
                'product_id' => $productId,
                'quantity' => $quantity,
            ]);
        }

        return $cartItem;
    }

    /**
     * 更新购物车中商品的数量
     *
     * @param int $itemId
     * @param int $quantity
     * @return bool
     */
    public static function updateQuantity($itemId, $quantity)
    {
        $cartItem = self::find($itemId);
        
        if (!$cartItem) {
            return false;
        }

        $cartItem->quantity = $quantity;
        return $cartItem->save();
    }

    /**
     * 从购物车中移除商品
     *
     * @param int $itemId
     * @return bool
     */
    public static function removeFromCart($itemId)
    {
        $cartItem = self::find($itemId);
        
        if (!$cartItem) {
            return false;
        }

        return $cartItem->delete();
    }

    /**
     * 清空用户的购物车
     *
     * @param int $userId
     * @return bool
     */
    public static function clearCart($userId)
    {
        return self::where('user_id', $userId)->delete();
    }

    /**
     * 获取购物车总价
     *
     * @param int $userId
     * @return float
     */
    public static function getCartTotal($userId)
    {
        $total = 0;
        $cartItems = self::getCartItems($userId);

        foreach ($cartItems as $item) {
            $total += $item->product->price * $item->quantity;
        }

        return $total;
    }
}